package com.test.springboot.jpa.service;

import com.test.springboot.jpa.pojo.User;
import org.springframework.data.domain.Example;

import java.util.List;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/8/18 2:59
 * @package com.test.springboot.jpa.service
 * @description 文件说明
 */

public interface UserCrudService {
    // ================================= count exists ==============================
    /**
     * 计数
     * @return
     */
    long countUser();

    /**
     * 判断用户是否存在
     * @param userExample
     * @return
     */
    boolean existUser(Example<User> userExample);

    /**
     * 通过主键判断记录是否存在
     * @param userId
     * @return
     */
    boolean existByPrimaryKey(Long userId);

    // ================================= select ==============================
    /**
     * 查询所有的记录
     * @return
     */
    List<User> selectAllUser();

    /**
     * 根据主键查询记录
     * @param userId
     * @return
     */
    User selectByPrimaryKey(Long userId);

    /**
     * 动态查询记录
     * @param userExample
     * @return
     */
    List<User>  selectByUserExample(Example<User> userExample);

    // ================================= create ==============================
    /**
     * 添加一条记录
     * @param user
     * @return
     */
    boolean insertUser(User user);

    /**
     * 批量添加记录
     * @param userList
     * @return
     */
    boolean insertAllUsers(List<User> userList);

    // ================================= update ==============================
    /**
     * 更新记录
     * @param user
     * @return
     */
    boolean updateUser(User user);

    // ================================= delete ==============================

    /**
     * 删除表中所有的记录
     * @return
     */
    boolean deleteAll();

    /**
     * 删除指定主键的记录
     * @param userId
     * @return
     */
    boolean deleteByPrimaryKey(Long userId);

    /**
     * 批量删除记录
     * @param userList
     * @return
     */
    boolean deleteInBranch(List<User> userList);

    /**
     * 动态删除记录
     * @param user
     * @return
     */
    boolean deleteByUser(User user);

}
